all repos — caroster @ 2e4e192becc64475ea9245eb5fec57f72cb7088e

[Octree] Group carpool to your event https://caroster.io

frontend/pages/e/[uuid]/index.tsx (view raw)

 1import {useState, PropsWithChildren} from 'react';
 2import Box from '@mui/material/Box';
 3import TravelColumns from '../../../containers/TravelColumns';
 4import NewTravelDialog from '../../../containers/NewTravelDialog';
 5import pageUtils from '../../../lib/pageUtils';
 6import EventLayout, {TabComponent} from '../../../layouts/Event';
 7import {EventByUuidDocument} from '../../../generated/graphql';
 8import {getLocaleForLang} from '../../../lib/getLocale';
 9
10interface Props {
11  eventUUID: string;
12  announcement?: string;
13}
14
15const Page = (props: PropsWithChildren<Props>) => {
16  return <EventLayout {...props} Tab={TravelsTab} />;
17};
18
19const TravelsTab: TabComponent<Props> = () => {
20  const [openNewTravelDialog, setNewTravelDialog] = useState(false);
21
22  return (
23    <Box>
24      <TravelColumns showTravelModal={() => setNewTravelDialog(true)} />
25      <NewTravelDialog
26        opened={openNewTravelDialog}
27        toggle={() => setNewTravelDialog(false)}
28      />
29    </Box>
30  );
31};
32
33export const getServerSideProps = pageUtils.getServerSideProps(
34  async (context, apolloClient) => {
35    const {uuid} = context.query;
36    const {host = ''} = context.req.headers;
37    let event = null;
38
39    // Fetch event
40    try {
41      const {data} = await apolloClient.query({
42        query: EventByUuidDocument,
43        variables: {uuid},
44      });
45      event = data?.eventByUUID?.data;
46    } catch (error) {
47      return {
48        notFound: true,
49      };
50    }
51
52    const description = await getLocaleForLang(
53      event?.attributes?.lang,
54      'meta.description'
55    );
56
57    return {
58      props: {
59        eventUUID: uuid,
60        metas: {
61          title: event?.attributes?.name || '',
62          description,
63          url: `https://${host}${context.resolvedUrl}`,
64        },
65      },
66    };
67  }
68);
69
70export default Page;